package com.zany.util.json;

import java.beans.PropertyDescriptor;
import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.zany.util.ZanyErrorMsg;
import com.zany.util.ZanyException;

public class JsonTools extends BeanInfoUtil{
	
	
	public static String lstMapToJson(List list)throws ZanyException, JSONException{
		JSONArray jsonLst = new JSONArray();
		for(int i=0;i<list.size();i++){
			Object obj = list.get(i);
		JSONObject json = JsonTools.mapToJson(obj);
		jsonLst.put(json);
		}
		return jsonLst.toString();
	}
	
	public static String lstBeanToJson(List list)throws ZanyException{
		JSONArray jsonLst = new JSONArray();
		for(int i=0;i<list.size();i++){
			Object obj = list.get(i);
		JSONObject json = JsonTools.beanToJson(obj);
		jsonLst.put(json);
		}
		return jsonLst.toString();
	}
	
	public static JSONObject mapToJson(Object obj)throws ZanyException, JSONException{
		try{
			Map map = (Map)obj;
			Set set = map.keySet();
			Iterator iter = set.iterator();
			JSONObject json = new JSONObject();
			while(iter.hasNext()){
				String key = (String)iter.next();
				String val = map.get(key.toUpperCase())==null?"":map.get(key.toUpperCase()).toString();
				json.put(key.toLowerCase(), val);			
			}
			return json;
		}catch(Exception e){
			throw new ZanyException(ZanyErrorMsg.ERR_DEFAULT,"对象转换JSON出错！",e);
		}
	}
	
	public static JSONObject beanToJson(Object obj)throws ZanyException{
		try{
			PropertyDescriptor[] props = BeanInfoUtil.getPropertyDescriptors(obj);
			JSONObject json = new JSONObject();
			for (int i = 0; i < props.length; i++) {
					if(BeanInfoUtil.rightName(props[i])){
						Object value=props[i].getReadMethod().invoke(obj,null);
						String val = "";
						if(value instanceof java.lang.Double){
							val = new BigDecimal(BeanInfoUtil.getReadMethod(props[i]).invoke(obj,null)==null?"0":BeanInfoUtil.getReadMethod(props[i]).invoke(obj,null).toString()).toString();
						}else{
							val = BeanInfoUtil.getReadMethod(props[i]).invoke(obj,null)==null?"":BeanInfoUtil.getReadMethod(props[i]).invoke(obj,null).toString();
						}
						
						json.put(props[i].getName(),val.trim());
					}
			}
			return json;
		}catch(Exception e){
			throw new ZanyException(ZanyErrorMsg.ERR_DEFAULT,"对象转换JSON出错！",e);
		}
	}
}
